home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Add-On
/
Workbench Add-On - Volume 1.iso
/
Dev
/
SmallTalk
/
examples
/
up.st
< prev
next >
Wrap
Text File
|
1995-08-25
|
3KB
|
122 lines
"Link in pids.c, and install a call to definePidFuncs in initCFuncs in
mstcint.c. This will provide access to some process related UNIX system
calls from within GNU Smalltalk."
"======================================================================
|
| Copyright (C) 1990, 1991, 1992 Free Software Foundation, Inc.
| Written by Steve Byrne.
|
| This file is part of GNU Smalltalk.
|
| GNU Smalltalk is free software; you can redistribute it and/or modify it
| under the terms of the GNU General Public License as published by the Free
| Software Foundation; either version 1, or (at your option) any later version.
|
| GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
| FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
| details.
|
| You should have received a copy of the GNU General Public License along with
| GNU Smalltalk; see the file LICENSE. If not, write to the Free Software
| Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
======================================================================"
Object subclass: #UnixProcess
instanceVariableNames: 'pid'
classVariableNames: ''
poolDictionaries: ''
category: 'Cool hacking'!
Behavior defineCFunc: 'getpid'
withSelectorArgs: 'getpid'
forClass: UnixProcess class
returning: #long
args: nil.
Behavior defineCFunc: 'getpgrp'
withSelectorArgs: 'getpgrp: pid'
forClass: UnixProcess
returning: #long
args: #(long).
Behavior defineCFunc: 'fork'
withSelectorArgs: 'fork'
forClass: UnixProcess class
returning: #long
args: nil.
Behavior defineCFunc: 'kill'
withSelectorArgs: 'kill: pid signal: sig'
forClass: UnixProcess
returning: #int
args: #(int int).
Behavior defineCFunc: 'vfork'
withSelectorArgs: 'vfork'
forClass: UnixProcess class
returning: #long
args: nil.
Behavior defineCFunc: 'execlp'
withSelectorArgs: 'execlp: name args: argsArray'
forClass: UnixProcess class
returning: #long
args: #(string variadic)!
" defineCFunc('fork', fork);
defineCFunc('kill', kill);
defineCFunc('killpg', killpg);
defineCFunc('getpgrp', getpgrp);
defineCFunc('setpgrp', setpgrp);
defineCFunc('getppid', getppid);
defineCFunc('nice', nice);
defineCFunc('vfork', vfork);
defineCFunc('execve', execve);
defineCFunc('execl', execl);
defineCFunc('execle', execle);
defineCFunc('execlp', execlp);
defineCFunc('execvp', execvp);"
!UnixProcess class methodsFor: 'test'!
myProc
^self new initPid: (self getpid)
!
for: aPid
^self new initPid: aPid
!!
!UnixProcess methodsFor: 'accessing'!
processGroup
^self getpgrp: pid
!!
!UnixProcess methodsFor: 'private'!
initPid: aPid
pid _ aPid
!!
| forkPid |
forkPid _ UnixProcess vfork.
stdout nextPutAll: 'Hello from process: '.
forkPid printNl.
forkPid = 0
ifTrue: [ ^UnixProcess execlp: 'dectalk'
args: #(dectalk I am 'sorry,' I do not know what I am saying 0) ].
forkPid printNl!
"| me |
me _ UnixProcess myProc.
me inspect!"